package com.no1.zy.controller.file;

import com.no1.zy.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@Controller
@RequestMapping("/file")
@Slf4j
public class FileController {

    @RequestMapping("upload")
    public String upload(@RequestParam("myFile") MultipartFile file, Model model) {
        // 如果用户忘了选择上传的文件，做个提示
        if(file.isEmpty())
            throw new RuntimeException("请选择要上传的文件");
        // 获得用户上传的文件的原始名称
        String filename = file.getOriginalFilename();
        log.debug("检测到上传文件的原始名称是：" + filename);
        // 获取到上传文件的后缀名
        String suffixName = StringUtil.getSuffixName(filename);
        // 生成一个随机文件名，作为服务器保存文件的文件名
        String newFileName = StringUtil.randomName();
        // 指定保存上传文件的路径
        String filePath = "E://tmp//";
        // 拼接处上传文件要保存的完整路径
        String fullFileName = filePath + newFileName + suffixName;
        log.debug("上传的文件要保存的完整路径是：" + fullFileName);
        // 文件上传
        File dest = new File(fullFileName);
        if(!dest.getParentFile().exists())
            dest.getParentFile().mkdirs();
        try {
            file.transferTo(dest);
            model.addAttribute("myImg", "/tmp/" + newFileName + suffixName);
            return "file/succ";
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("文件上传失败！");
        }
    }
}
